let SynObj = require("../jce/SynchronousProxy").News;
let moment = require('moment');
let DifDbSimpleInfo = function () {
};
/**
 * 根据 jce 此方法应该返回 GetRecordDIfRsp
 * {
 * 0 ret
 * 1 msp
 * 2 vector<DifRecord{
 *            0 id sta/rule_id
 *            1 difType
 *            //null
 *            2 map<string,DifDetail{
 *                         0 testDetail
 *                         1 realDetail
 *                                   }>
 *                    }>
 * }
 * */
DifDbSimpleInfo.prototype.difDbSimpleInfo = function (real, test, difType) {
    /**test real dbproxy返回的结果集 */

    /** 获取测试环境 与正式环境 相同字段  array<string>*/
    real = real.response.arguments.vMysqlData.value;
    test = test[0];
    let keys = new Array();
    for (let rkey in real[0].value) {
        for (let tkey in test[0]) {
            if (rkey == tkey) {
                keys.push(rkey);
                break;
            }
        }
    }


    /** 获取差异数据 */
    let GetRecordDIfRsp = new SynObj.GetRecordDifRsp();

    for (let indexOfTest = 0; indexOfTest < test.length; indexOfTest++) {
        let flag = 0;//标识 ~这两条数据是(1)/否(0)相同
        let kflag = new Array(keys.length).fill(0); //标识某字段的值是否相等 默认全不等
        let DifRecord = new SynObj.DifRecord();

        /** 初始化 - 格式化 */
        let jsonKey = ['config_details', 'query_js'];
        let nullValue = [null, '','0',0,'0000-00-00 00:00:00'];
        for (let k = 0; k < keys.length; k++) {
            /** 判断之前 对Sequelize 抓取得数据
             *  <整型数据toString,保证数据类型和real相同
             *  格式化update/created_time，方便生成sql语句
             *
             *  json型数据
             *  格式化JSON 串,方便进行两个json串 进行比较
             *
             *  url 对\ 转义成\\
             *
             * */
            //
            if (jsonKey.indexOf(keys[k]) != -1) {

                let tJsonBak = '';
                let rJsonBak = '';
                if (nullValue.indexOf(test[indexOfTest][keys[k]]) == -1) {                // 测试的第indexOfTest条数据 中的第K条相同字段不为空
                    tJsonBak = test[indexOfTest][keys[k]];
                    tJsonBak = tJsonBak.replace(/[\r|\n|\s|\\n|\\t]/g, '').trim()
                }

                if (indexOfTest < real.length && nullValue.indexOf(real[indexOfTest].value[keys[k]]) == -1) {          //indexofTest<real.length 保证real内含有该字段，并不为空
                    rJsonBak = real[indexOfTest].value[keys[k]];
                    rJsonBak = tJsonBak.replace(/[\r|\n|\s|\\n|\\t]/g, '').trim()
                }

                if (tJsonBak == rJsonBak) {
                    // kflag[k]=!kflag[k];
                    kflag[k] = 1;
                }

            }
            if (keys[k] == 'url_pattern') {
                test[indexOfTest][keys[k]] = test[indexOfTest][keys[k]].replace(/\\/g, '\\\\');
                if (indexOfTest < real.length) {
                    real[indexOfTest].value[keys[k]] = real[indexOfTest].value[keys[k]].replace(/\\/g, '\\\\')
                }

            }

            //将不为空的数据 转化为字符串，空的数据转为空字符串
            if (test[indexOfTest][keys[k]] != null) {           //不为空null
                test[indexOfTest][keys[k]] = test[indexOfTest][keys[k]].toString();
            } else {
                test[indexOfTest][keys[k]] = ''
            }

            if (/^\S+_time$/g.test(keys[k]) && test[indexOfTest][keys[k]]!=null) {
                test[indexOfTest][keys[k]] = moment(test[indexOfTest][keys[k]], 'ddd MMM DD YYYY HH:mm:ss').format('YYYY-MM-DD HH:mm:ss')
            }


        }

        for (let k = 0; k < keys.length; k++) {
            /** 测试库长度大于正式库 全部插入 的数据**/
            if (indexOfTest >= real.length) {

                if (difType == 1) {
                    DifRecord.id = test[indexOfTest]['station_id'];
                } else {
                    DifRecord.id = test[indexOfTest]['config_id'];
                }
                DifRecord.difType = difType;
                flag = 1;

                break;
            }


            /** 测试库部分等于正式库 检查update */
            //kflag[k] 只有在 整型数据均为空 json型数据jsonkey 相等的时候才会为 1
            if ((nullValue.indexOf(real[indexOfTest].value[keys[k]])+1>0)&&(nullValue.indexOf(test[indexOfTest][keys[k]])+1>0)) {
                kflag[k] = 1;
            }

            if (!kflag[k] && real[indexOfTest].value[keys[k]] != test[indexOfTest][keys[k]]) {
                if (difType == 1) {
                    DifRecord.id = test[indexOfTest]['station_id'];
                } else {
                    DifRecord.id = test[indexOfTest]['config_id'];
                }
                DifRecord.difType = difType;
                flag = 1;
                break;
            }
        }

        if (flag) {
            GetRecordDIfRsp.vDifRecord.push(DifRecord);
        }
    }
    return GetRecordDIfRsp;
}

module.exports = DifDbSimpleInfo